import * as dd from 'dingtalk-jsapi';
// 钉钉api


function ddConfig(params) {
  return new Promise((resolve) => {
    dd.config({
      ...params
    });
    dd.error((err) => {
      alert(JSON.stringify(err));
      console.log(err);
    });
    resolve("ok");
  })
}


// 获取钉钉环境是pc还是移动端
function getDDplatform() {
  return new Promise((resolve) => {
    // alert(JSON.stringify(dd.env))
    // platform   notInDingTalk  ios android
    resolve(dd.env.platform || '');
  })
}

// 是否在钉钉环境pc端中 
function isDDPCPlatform() {
  return new Promise((resolve) => {
    resolve(dd.env.platform == 'pc' ? true : false);
  })
}

// 是否在钉钉环境移动端中 
function isDDMobilePlatform() {
  return new Promise((resolve) => {
    const platform = dd.env.platform;
    let value = false;
    if (platform == "ios" || platform == "android") {
      value = true;
    }
    resolve(value);
  })
}

// 钉钉环境
function notInDingTalk() {
  let value = dd.env.platform == "notInDingTalk" ? true : false;
  if (value) {
    alert("请在钉钉容器内打开页面");
  }
  return new Promise((resolve) => {
    resolve(value);
  })
}

// 分享
async function share(url, title, content, image) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.util.share({
        type: 0, //分享类型，0:全部组件 默认； 1:只能分享到钉钉；2:不能分享，只有刷新按钮
        url: url,
        title: title,
        content: content,
        image: image,
        onSuccess: function () {
          resolve("ok")
          console.log('1111');

        },
        onFail: function (err) {
          console.log(err);
          console.log('221');
          resolve("err")
        }
      });
    });
  });
}
// 复制
async function setData(text) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.clipboardData.setData({
        text: text, //要复制粘贴板的内容
        onSuccess: function (result) {
          resolve("复制成功")
        },
        onFail: function () {
          resolve("复制失败")
        }
      });
    });
  });
}


async function setRight(show, control, text) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.biz.navigation.setRight({
      show: show || false, //控制按钮显示， true 显示， false 隐藏， 默认true
      control: control || false, //是否控制点击事件，true 控制，false 不控制， 默认false
      text: text || "", //控制显示文本，空字符串表示显示默认文本
      onSuccess: function (result) {
        resolve(true);
      },
      onFail: function (err) {
        resolve(false);
      }
    });

  });
}

//免登code获取
async function requestAuthCode(corpId) {
  if (await notInDingTalk()) {
    return;
  }
  return new Promise((resolve) => {
    let res = {
      success: false,
      data: "",
      errorMsg: "",
    }
    if (!corpId) {
      res.errorMsg = "获取临时授权码失败,请输入corpId";
      resolve(res);
      return;
    }
    dd.ready(function () {
      dd.runtime.permission.requestAuthCode({
        corpId: corpId,
        onSuccess: function (result) {
          res.success = true;
          res.data = result;
          resolve(res);
        },
        onFail: function (err) {
          res.errorMsg = JSON.stringify(err);
          resolve(res);
        }
      });
    });
  });
}




async function datepicker(value) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.util.datepicker({
        format: 'yyyy/MM/dd', //注意：format只支持android系统规范，即2015-03-31格式为yyyy-MM-dd
        value: value || '', //默认显示日期
        onSuccess: function (result) {
          resolve(result.value);
        },
        onFail: function (err) {
          resolve(false);
        }
      })
    });
  });
}



async function chooseInterval(defaultStart, defaultEnd) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.calendar.chooseInterval({
        defaultStart: defaultStart || '',
        defaultEnd: defaultEnd || '',
        onSuccess: function (result) {
          resolve(result.value);
        },
        onFail: function (err) {
          resolve(false);
          console.log(err);

        }
      })
    });
  });
}

async function uploadImageFromCamera() {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.util.uploadImageFromCamera({
        compression: true,
        onSuccess: ([imgURL]) => {
          resolve(imgURL)
        },
        onFail: error => {
          resolve(false);
        }
      });
    });
  });
}


// 检测钉钉版本
async function watchDDFersion() {
  if (await notInDingTalk()) {
    return;
  }
  return new Promise((resolve) => {
    let isLow = false; //是否是低版本
    let version = dd.version; //version即容器版本号
    if (
      version.split(".")[0] < 4 ||
      (version.split(".")[0] == 4 && version.split(".")[1] < 6) ||
      (version.split(".")[0] == 4 && version.split(".")[1] == 6 && version.split(".")[2] < 18)
    ) {
      isLow = true;
    }
    resolve(isLow);
  });
}


async function openLink(url) {
  if (await notInDingTalk()) {
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.util.openLink({
        url: url,
        onSuccess: function (result) {
          resolve("ok")
        },
        onFail: function (err) {
          resolve("err")
        }
      });
    });
  });
}

async function setScreenBrightnessAndKeepOn(brightness = 1, isKeep = true) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.util.setScreenBrightnessAndKeepOn({
        brightness: brightness,
        isKeep: isKeep,
        onSuccess: function (result) {
          resolve("ok")
        },
        onFail: function (error) {
          resolve("err")
        }
      });
    });
  });
}



//钉钉TITLE设置 
async function setTitle(title) {
  if (await notInDingTalk()) {
    return;
  }
  if (await isDDPCPlatform()) {
    alert("请在钉钉移动端使用此api");
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.navigation.setTitle({
        title: title || "", //控制标题文本，空字符串表示显示默认文本
        onSuccess: function (result) {
          resolve("ok")
        },
        onFail: function (err) {
          resolve("err")
        }
      });
    });
  });
}




// 支持选人和选部门
async function complexPicker(title, corpId, pickedUsers, multiple) {
  if (await notInDingTalk()) {
    return;
  }
  return new Promise((resolve) => {
    dd.ready(function () {
      dd.biz.contact.complexPicker({
        title: title || "标题", //标题
        corpId: corpId, //企业的corpId
        multiple: multiple, //是否多选
        limitTips: "人数过多", //超过限定人数返回提示
        maxUsers: 1000000, //最大可选人数
        pickedUsers: pickedUsers || [], //已选用户
        pickedDepartments: [], //已选部门
        disabledUsers: [], //不可选用户
        disabledDepartments: [], //不可选部门
        requiredUsers: [], //必选用户（不可取消选中状态）
        requiredDepartments: [], //必选部门（不可取消选中状态）
        appId: "", //微应用的Id
        permissionType: "", //可添加权限校验，选人权限，目前只有GLOBAL这个参数
        responseUserOnly: false, //返回人，或者返回人和部门
        startWithDepartmentId: 0, //仅支持0和-1
        onSuccess: function (result) {

          /**
          {
              selectedCount:1,                              //选择人数
              users:[{"name":"","avatar":"","userid":""}]，//返回选人的列表，列表中的对象包含name（用户名），avatar（用户头像），emplId（用户工号）三个字段
              departments:[{"id":,"name":"","number":}]//返回已选部门列表，列表中每个对象包含id（部门id）、name（部门名称）、number（部门人数）
          }
          */
          resolve(result);
        },
        onFail: function (err) {
          resolve({
            selectedCount: 0,
            departments: [],
            users: [],
          });
        }
      });
    });
  });
}



// 案例
// async function complexPicker(params) {
//   if (await notInDingTalk()) {
//     return;
//   }

//   return new Promise((resolve) => {
//     dd.ready(function () {
//       // 1
//     });

//   });
// }








export default {
  share,
  setData,
  setRight,
  datepicker,
  chooseInterval,
  uploadImageFromCamera,
  watchDDFersion,
  openLink,
  setScreenBrightnessAndKeepOn,
  setTitle,
  notInDingTalk,
  requestAuthCode,
  getDDplatform,
  isDDMobilePlatform,
  ddConfig,
  complexPicker
}


// export class Ddapi {

//   //钉钉签名设置
//   config(cfg) {
//           dd.config(cfg);
//       }
//       //钉钉容器设置
//   ready() {
//       return new Promise(function(resolve) {
//           dd.ready(function() {
//               resolve();
//           });
//       })
//   }

//   //钉钉图片显示
//   previewImage(urls, thisUrl) {
//       dd.biz.util.previewImage({
//           urls: urls, //图片地址列表
//           current: thisUrl, //当前显示的图片链接
//           onSuccess: function(result) {
//               /**/
//           },
//           onFail: function(err) {}
//       })
//   }


//   // //钉钉扫码功能
//   // utilscan() {
//   //     return new Promise(function(resolve) {
//   //         dd.biz.util.scan({
//   //             type: String,
//   //             onSuccess: function(data) {
//   //                 alert(data)
//   //             },
//   //             onFail: function(err) {
//   //                 alert(JSON.stringify(err))
//   //             }
//   //         })
//   //     })
//   // }



//   // // 获取微应用反馈式操作的临时授权码
//   // requestAppAuthCode(corpId, agentId) {
//   //         return new Promise(function(resolve, reject) {
//   //             dd.runtime.permission.requestOperateAuthCode({
//   //                 corpId: corpId,
//   //                 agentId: agentId,
//   //                 onSuccess: function(result) {
//   //                     resolve(result.code);
//   //                 },
//   //                 onFail: function(err) {
//   //                     reject(err);
//   //                 }
//   //             });
//   //         });
//   //     }
//   //钉钉TITLE设置
//   setTitle(title) {
//       dd.biz.navigation.setTitle({
//           title: title, //控制标题文本，空字符串表示显示默认文本
//           onSuccess: function(result) {

//           },
//           onFail: function(err) {

//           }
//       });
//   }

//   //钉钉错误信息设置
//   error() {
//           return new Promise(function(resolve) {
//               dd.error(function(error) {
//                   resolve(error);
//               });
//           });
//       }
//       //钉钉alert项目提示框
//   alert(msgtext) {
//           return new Promise(function(resolve) {
//               dd.device.notification.alert({
//                   message: msgtext,
//                   title: "提示", //可传空
//                   buttonName: "确认",
//                   onSuccess: function() {},
//                   onFail: function(err) {}
//               });

//           })
//       }
//       //钉钉confirm项目提示框
//   confirm(msgtext) {
//       return new Promise(function(resolve) {
//           dd.device.notification.confirm({
//               message: msgtext,
//               title: "提示",
//               buttonLabels: ['确认', '取消'],
//               onSuccess: function(result) {
//                   resolve(result.buttonIndex)
//               },
//               onFail: function(err) {}
//           });
//       })
//   }

//   //钉钉提示信息
//   toast(text, icon) {
//       dd.device.notification.toast({
//           icon: icon, //icon样式，有success和error，默认为空 0.0.2
//           text: text, //提示信息
//           duration: 2, //显示持续时间，单位秒，默认按系统规范[android只有两种(<=2s >2s)]
//           delay: 0, //延迟显示，单位秒，默认0
//           onSuccess: function(result) {},
//           onFail: function(err) {}
//       });
//   }

//   //关闭当前页面
//   close() {
//       dd.biz.navigation.close({
//           onSuccess: function(result) {},
//           onFail: function(err) {}
//       })
//   }

//   // //启用下拉刷新
//   // enableRefresh() {
//   //     return new Promise((resolve, reject) => {
//   //         dd.ui.pullToRefresh.enable({
//   //             onSuccess: function(result) {
//   //                 resolve(result);
//   //             },
//   //             onFail: function(err) {
//   //                 reject(err);
//   //             }
//   //         })
//   //     })
//   // }

//   // 复制
//   setData(text) {
//       return new Promise((resolve, reject) => {
//           dd.biz.clipboardData.setData({
//               text: text, //要复制粘贴板的内容   
//               onSuccess: function(result) {
//                   resolve("0");
//               },
//               onFail: function(err) {
//                   reject('-1');
//               }
//           })
//       })
//   }

//   // //禁用刷新
//   // disabRefresh() {
//   //     dd.ui.pullToRefresh.disable({
//   //         onSuccess: function() {},
//   //         onFail: function() {}
//   //     })
//   // }

//   // //单个按钮设置
//   // navigationSetRight(name) {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.navigation.setRight({
//   //             show: true, //控制按钮显示， true 显示， false 隐藏， 默认true
//   //             control: true, //是否控制点击事件，true 控制，false 不控制， 默认false
//   //             text: name, //控制显示文本，空字符串表示显示默认文本
//   //             onSuccess: function(result) {
//   //                 resolve(result);
//   //             },
//   //             onFail: function(err) {
//   //                 reject(err);
//   //             }
//   //         });
//   //     })
//   // }

//   // 
//   setRightFalse(name, show = true, control = true) {
//       return new Promise((resolve, reject) => {
//           dd.biz.navigation.setRight({
//               show: false,
//               control: false,
//               text: '',
//               onSuccess: function(result) {},
//               onFail: function(err) {}
//           });
//       })
//   }

//   // //钉钉左测按钮控制
//   // navigationsetLeft() {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.navigation.setLeft({
//   //             show: true, //控制按钮显示， true 显示， false 隐藏， 默认true
//   //             control: false, //是否控制点击事件，true 控制，false 不控制， 默认false
//   //             showIcon: true, //是否显示icon，true 显示， false 不显示，默认true； 注：具体UI以客户端为准
//   //             text: '我工模压要', //控制显示文本，空字符串表示显示默认文本
//   //             onSuccess: function() {
//   //                 alert(result)
//   //                     /*
//   //                     {}
//   //                     */
//   //                     //如果control为true，则onSuccess将在发生按钮点击事件被回调
//   //             },
//   //             onFail: function(err) {}
//   //         });
//   //     });
//   // }

//   // //钉钉多个按钮设置
//   // setMenu(items, backColor = "#ffffff", textColor = "#DB2C30") {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.navigation.setMenu({
//   //             backgroundColor: backColor,
//   //             textColor: textColor,
//   //             items: items,
//   //             onSuccess: function(data) {
//   //                 resolve(JSON.stringify(data));
//   //             },
//   //             onFail: function(err) {}
//   //         });

//   //     })
//   // }

//   //获取钉钉个人信息[头像，名称]
//   // getUserInfo() {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.user.get({
//   //             onSuccess: function(info) {
//   //                 resolve(info);
//   //             },
//   //             onFail: function(err) {
//   //                 reject(err);
//   //             }
//   //         });
//   //     });
//   // }




//   // //钉钉组织内人员多选。
//   // contactChoose(userids, title) {
//   //     return new Promise(function(resolve, reject) {
//   //         dd.biz.contact.choose({
//   //             startWithDepartmentId: -1, //-1表示打开的通讯录从自己所在部门开始展示, 0表示从企业最上层开始，(其他数字表示从该部门开始:暂时不支持)
//   //             multiple: true, //是否多选： true多选 false单选； 默认true
//   //             users: userids, //默认选中的用户列表，userid；成功回调中应包含该信息
//   //             disabledUsers: [], // 不能选中的用户列表，员工userid
//   //             corpId: localStorage.getItem('corpId'), //企业id
//   //             max: 1500, //人数限制，当multiple为true才生效，可选范围1-1500
//   //             limitTips: "你好，已经超出人数限制", //超过人数限制的提示语可以用这个字段自定义
//   //             isNeedSearch: true, // 是否需要搜索功能
//   //             title: title, // 如果你需要修改选人页面的title，可以在这里赋值 
//   //             local: true, // 是否显示本地联系人，默认false
//   //             onSuccess: function(data) {
//   //                 resolve(data)
//   //             },
//   //             onFail: function(err) {
//   //                 alert(JSON.stringify(err))
//   //             }
//   //         });

//   //     })

//   // }

//   //打开http跳转
//   openLink(url) {
//       dd.biz.util.openLink({
//           "url": url,
//           "enableShare": true
//       });
//   }

//   uploadImages(maxNum) {
//       return new Promise(function(resolve, reject) {
//           dd.biz.util.uploadImage({
//                   compression: false, //(是否压缩，默认为true)
//                   multiple: true, //是否多选，默认false
//                   max: maxNum, //最多可选个数
//                   onSuccess: function(result) {
//                       resolve(result)
//                   },
//                   onFail: function(err) {
//                       reject("取消上传图片");
//                   }
//               })
//               // dd.biz.util.uploadImage({
//               //     compression: true, //(是否压缩，默认为true)
//               //     multiple: true, //是否多选，默认false
//               //     max: maxNum, //最多可选个数
//               //     quality: 50, // 图片压缩质量, 
//               //     resize: 50, // 图片缩放率
//               //     stickers: { // 水印信息
//               //         time: "",
//               //         dateWeather: "",
//               //         username: "",
//               //         address: ""
//               //     },
//               //     onSuccess: function(result) {
//               //         resolve(result)
//               //     },
//               //     onFail: function(err) {
//               //         reject("取消上传图片");
//               //     }
//               // })
//       })

//   }


//   choose(title, arry) {
//       return new Promise(function(resolve, reject) {
//           dd.device.notification.actionSheet({
//               title: title, //标题
//               cancelButton: '取消', //取消按钮文本
//               otherButtons: arry,
//               onSuccess: function(result) {
//                   resolve(result)
//               },
//               onFail: function(err) {}
//           })
//       })

//   }

//   //钉钉标题
//   setTitle(title) {
//       dd.biz.navigation.setTitle({
//           title: title, //控制标题文本，空字符串表示显示默认文本
//           onSuccess: function(result) {},
//           onFail: function(err) {}
//       });
//   }


//   //loading
//   showLoading(title) {
//       dd.device.notification.showPreloader({
//           text: title, //loading显示的字符，空表示不显示文字
//           showIcon: true, //是否显示icon，默认true
//           onSuccess: function(result) {
//               /*{}*/
//           },
//           onFail: function(err) {}
//       })
//   }

//   //禁用加载
//   hidePreloader() {
//       dd.device.notification.hidePreloader({
//           onSuccess: function(result) {},
//           onFail: function(err) {}
//       })
//   }

//   // complexChoose(users, depts) {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.contact.complexChoose({
//   //             startWithDepartmentId: 0, //-1表示从自己所在部门开始, 0表示从企业最上层开始，其他数字表示从该部门开始
//   //             selectedUsers: users, //预选用户
//   //             disabledUsers: [], // 不能选中的用户列表，员工userid
//   //             selectedDepartments: depts, // 预选中的部门列表，部门id
//   //             disabledDepartments: [], // 不能选中的部门列表，部门id
//   //             // max: Number, //人数限制，当multiple为true才生效，可选范围1-1500
//   //             // limitTips: "xxx", //超过人数限制的提示语可以用这个字段自定义
//   //             local: "true", // 是否显示本地联系人，默认false
//   //             isNeedSearch: true, // 是否需要搜索功能
//   //             corpId: this.corpId, //企业id
//   //             onSuccess: function(data) {
//   //                 resolve(data);
//   //             },
//   //             onFail: function(err) {
//   //                 reject(err)
//   //             }
//   //         });
//   //     })
//   // }

//   // //日期
//   // datetimepicker(value) {
//   //     return new Promise((resolve, reject) => {
//   //         dd.biz.util.datetimepicker({
//   //             format: "yyyy-MM-dd HH:mm",
//   //             value: value, //默认显示
//   //             onSuccess: function(data) {
//   //                 resolve(data.value)
//   //             },
//   //             onFail: function(err) {
//   //                 reject.error(err);
//   //             }
//   //         });
//   //     });
//   // }

//   // //下拉底部控件
//   // scrollLoad() {
//   //     return new Promise(function (resolve) {
//   //         document.getElementById("CloudBody").onscroll = function () {
//   //             if (this.scrollTop < 2) {
//   //                 resolve(0)
//   //             }
//   //             if (this.scrollTop > 2) {
//   //                 dd.ui.pullToRefresh.disable()
//   //             }
//   //             if (this.scrollHeight - this.scrollTop - this.offsetHeight < 2) {
//   //                 resolve(1)
//   //             }
//   //         }
//   //     })
//   // }
// }

// let ddapi = new Ddapi();
// export default ddapi;
